<template>
    <div>
        <!-- 3. 配合vuex拆分模块后的写法-->
        <p>{{num}}</p>
        <p>{{title}}</p>
        <hr>
        <p>{{dbNum}}</p>
        <hr>
         <button @click="addNum(10)">按钮</button>
        <button @click="asyncAddNum(20)">异步按钮</button>
    </div>
</template>

<script>
import { mapState,mapGetters, mapMutations, mapActions} from 'vuex'
export default {
    name:'',
    components: {

    },
    props: {

    },
    data() {
        return {

        };
    },
    /*  
        mapState(模块名,[需要导入的变量名]) 其他几个也类似，只不过是写函数名
        但是这种写法 只适合导入一个 被拆分的模块
    computed: {
        ...mapState('changeNum',['num','title']),
        ...mapGetters('changeNum',['dbNum'])
    },
    methods: {
       ...mapMutations('changeNum',['addNum']),
       ...mapActions('changeNum',['asyncAddNum'])
    },
    */

   // 辅助函数导入多个模块时写法 注意都是要传入对象 {}  没啥特别东西，就是记语法
   /*
        自我总结点
        1. mapState 的对象里面需要传入的是一系列函数:  变量名(名字自定义，但一般取和导入变量名称一样): state => state.模块名.对应模块的变量名
        2. mapGetters mapMutations mapActions  的对象里面需要传入的是一系列键值对  函数名: '模块名.对应模块的要导入的函数名'
   */   
   computed: {
        ...mapState({
            num: state => state.changeNum.num,
            title: state=> state.changeNum.title
        }),
        ...mapGetters({
            dbNum: 'changeNum/dbNum'
        })
    },
    methods: {
       ...mapMutations({
           addNum: 'changeNum/addNum'
       }),
       ...mapActions({
           asyncAddNum: 'changeNum/asyncAddNum'
       })
    },
};
</script>

<style scoped lang="less">

</style>
